package com.cyy.media.service;

import com.cyy.base.model.PageParams;
import com.cyy.base.model.PageResult;
import com.cyy.base.model.RestResponse;
import com.cyy.media.model.dto.QueryMediaParamsDto;
import com.cyy.media.model.dto.UploadFileParamsDto;
import com.cyy.media.model.dto.UploadFileResultDto;
import com.cyy.media.model.po.MediaFiles;
import org.springframework.web.bind.annotation.RequestBody;

import java.io.File;
import java.util.List;

/**
 * @description 媒资文件管理业务类
 * @author cyy
 * @version 1.0
 */
public interface MediaFileService {

 /**
  * @description 媒资文件查询方法
  * @param pageParams 分页参数
  * @param queryMediaParamsDto 查询条件
  * @return com.cyy.base.model.PageResult<com.cyy.media.model.po.MediaFiles>
  * @author Mr.M
  * @date 2022/9/10 8:57
 */
 public PageResult<MediaFiles> queryMediaFiels(Long companyId,PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);

 /**
  * 上传文件
  * @param companyId 机构id
  * @param uploadFileParamsDto 上传文件信息
  * @param localFilePath 文件磁盘路径
  * @return 文件信息
  */
 public UploadFileResultDto uploadFile(Long companyId, UploadFileParamsDto uploadFileParamsDto, String localFilePath);

    MediaFiles addMediaFilesToDb(Long companyId, String fileMd5, UploadFileParamsDto uploadFileParamsDto, String bucketFiles, String objectName);

    boolean addMediaFilesMinio(String localFilePath, String mimeType, String bucket, String objectName);

    /**
     *  检查文件是否存在
     * @param fileMd5
     * @return
     */
    RestResponse<Boolean> checkFile(String fileMd5);

    /**
     * 检查分块是否存在
     * @param fileMd5
     * @param chunk
     * @return
     */
    RestResponse<Boolean> checkChunk(String fileMd5, int chunk);

    /**
     * 上传分块文件
     * @param fileMd5
     * @param chunk
     * @param absolutePath
     * @return
     */
    RestResponse uploadChunk(String fileMd5, int chunk, String absolutePath);

    /**
     * 下载文件
     * @param bucket
     * @param objectName
     * @return
     */
    File downloadFileFromMinio(String bucket, String objectName);

    /**
     * 合并分块文件
     * @param companyId
     * @param fileMd5
     * @param chunkTotal
     * @param uploadFileParamsDto
     * @return
     */
    RestResponse mergeChunks(Long companyId, String fileMd5, int chunkTotal, UploadFileParamsDto uploadFileParamsDto);

    MediaFiles getFileById(String mediaId);
}
